package com.ffox.controller;

import com.ffox.entity.HomeworkProblem;
import com.ffox.entity.HomeworkProblemFile;
import com.ffox.entity.HomeworkResult;
import com.ffox.entity.HomeworkResultFile;
import com.ffox.service.HomeworkService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 作业管理控制器类，提供教师发布作业、学生提交作业、查询作业及结果等功能的接口。
 */
@RestController
@RequestMapping("/homework")
public class HomeworkController {

    @Autowired
    private HomeworkService homeworkService;

    /**
     * 教师发布作业题目，并上传相关附件文件。
     *
     * @param problem 作业题目信息对象，包含作业标题、内容、截止时间等信息
     * @param files   上传的附件文件数组
     * @return 返回插入操作影响的记录数（通常为1表示成功）
     */
    @RequestMapping(value = "/insertHomeworkProblem", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public Integer insertHomeworkProblem(@ModelAttribute HomeworkProblem problem, @RequestParam("files") MultipartFile[] files) {
        return homeworkService.insertHomeworkProblem(problem, files);
    }

    /**
     * 根据教师ID查询该教师发布的所有作业题目。
     *
     * @param userNum 教师唯一标识符
     * @return 返回该教师发布的所有作业题目列表
     */
    @RequestMapping("/getHomeworkProblemByUserNum")
    public List<HomeworkProblem> getHomeworkProblemByUserNum(@RequestParam String userNum) {
        System.out.println(userNum);
        return homeworkService.getHomeworkProblemByUserNum(userNum);
    }

    /**
     * 根据作业题目ID查询所有学生提交的作业结果。
     *
     * @param problemId 作业题目唯一标识符
     * @return 返回该作业题目下所有学生的作业提交结果列表
     */
    @RequestMapping("/getHomeworkResultByProblemId")
    public List<HomeworkResult> getHomeworkResultByProblemId(@RequestParam String problemId) {
        return homeworkService.getHomeworkResultByProblemId(problemId);
    }

    /**
     * 学生提交作业结果，并上传相关附件文件。
     *
     * @param result 学生提交的作业结果对象，包含学生信息、答案内容等
     * @param files  上传的附件文件数组
     * @return 返回插入操作影响的记录数（通常为1表示成功）
     */
    @RequestMapping(value = "/insertHomeworkResult", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public Integer insertHomeworkResult(@ModelAttribute HomeworkResult result, @RequestParam("files") MultipartFile[] files) {
        return homeworkService.insertHomeworkResult(result, files);
    }

    /**
     * 根据作业题目ID和学生学号查询特定学生的作业提交结果。
     *
     * @param problemId   作业题目唯一标识符
     * @param studentNum  学生学号
     * @return 返回指定学生在指定作业下的提交结果对象
     */
    @RequestMapping("/getHomeworkResult")
    public HomeworkResult getHomeworkResult(@RequestParam Integer problemId, @RequestParam String studentNum) {
        return homeworkService.getHomeworkResult(problemId, studentNum);
    }

    /**
     * 更新作业评分、教师评语以及批改时间。
     *
     * @param score       作业得分
     * @param tComment    教师评语
     * @param resultId    作业结果唯一标识符
     * @return 返回更新操作影响的记录数（通常为1表示成功）
     */
    @RequestMapping("/updateHomeworkScoreAndTCommentAndCorrectTime")
    public Integer updateHomeworkScoreAndTCommentAndCorrectTime(@RequestParam Long score, @RequestParam String tComment, @RequestParam Integer resultId) {
        return homeworkService.updateHomeworkScoreAndTCommentAndCorrectTime(score, tComment, resultId);
    }

    /**
     * 根据班级ID查询该班级下的所有作业题目。
     *
     * @param classId 班级唯一标识符
     * @return 返回该班级下的所有作业题目列表
     */
    @RequestMapping("/getHomeworkProblemByClassId")
    public List<HomeworkProblem> getHomeworkProblemByClassId(@RequestParam Long classId) {
        return homeworkService.getHomeworkProblemByClassId(classId);
    }

    /**
     * 根据作业结果ID查询该作业结果的所有附件文件信息。
     *
     * @param resultId 作业结果唯一标识符
     * @return 返回该作业结果的所有附件文件列表
     */
    @RequestMapping("/getHomeworkResultFileByResultId")
    public List<HomeworkResultFile> getHomeworkResultFileByResultId(@RequestParam Long resultId) {
        return homeworkService.getHomeworkResultFileByResultId(resultId);
    }

    /**
     * 根据作业题目ID查询该作业题目的所有附件文件信息。
     *
     * @param problemId 作业题目唯一标识符
     * @return 返回该作业题目的所有附件文件列表
     */
    @RequestMapping("/getHomeworkProblemFileByProblemId")
    public List<HomeworkProblemFile> getHomeworkProblemFileByProblemId(@RequestParam Integer problemId) {
        return homeworkService.getHomeworkProblemFileByProblemId(problemId);
    }


}
